package files;

import java.io.File;
import java.io.IOException;

/**
 * 1、理解不同层次的路径之间分隔符在不同系统中也不相同
 * 2、相对路径:
 *    ""  表示当前路径 :  File fod = new File( "" );
 *    "." 表示当前路径 :  File fod = new File( "." );
 *    ".." 表示当前路径的上级路径(父路径) :  File fod = new File( ".." );
 *    "/" 表示根路径: File fod = new File( "/" );
 *    				不同操作系统中 / 所表示的根路径是不同的 ( 主要针对 Windows 系统 )
 * 3、获取绝对路径 : getAbsolutePath / getAbsoluteFile
 * 4、获取规范路径 : getCanonicalPath / getCanonicalFile
 */
public class FileTest3 {

	public static void main(String[] args) throws IOException {
		
		// File 类中的常量 separator 和 separatorChar 用于获取 与系统相关的 "路径分隔符"
		System.out.println( "separator : " + File.separator );
		// 比如在 Linux 、 Unix 、 macOS 等系统中的路径:
		// "/Users/HAN/workspaces/java-advanced/FilesAndStreams" 
		// 不同的层次的路径之间 使用 / 分隔
		System.out.println( "separatorChar : " + File.separatorChar );
		
		// 而 Windows 操作系统中，则默认使用 \ 来分隔不同层次的路径，比如 D:\SQL
		
		System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
		
		// 注意，这里的 "" 表示当前路径，可以通过 获取绝对路径来证明
		File fod = new File( "" );
		System.out.println( "relative path : " + fod );
		
		String absolutePath = fod.getAbsolutePath() ; // 获取 fod 所表示路径的绝对路径
		System.out.println( "absolute path : " + absolutePath );
		
		System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
		
		fod = new File( "./src" ); // 一个圆点表示当前路径
		System.out.println( "relative path : " + fod );
		
		absolutePath = fod.getAbsolutePath();
		System.out.println( "absolute path : " + absolutePath );
		
		String canonicalPath = fod.getCanonicalPath(); // IOException
		System.out.println( "canonical path : " + canonicalPath );
		
		System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
		
		fod = new File( "../" ); // 两个圆点表示当前路径的父路径
		System.out.println( "relative path : " + fod );
		
		absolutePath = fod.getAbsolutePath(); // 获取绝对路径
		System.out.println( "absolute path : " + absolutePath );
		
		canonicalPath = fod.getCanonicalPath(); // 获取规范化路径 IOException
		System.out.println( "canonical path : " + canonicalPath );
		
		System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
		
		fod = new File( "/" ); // 注意 "/" 表示根目录 ( Windows 与 Linux/Unix/macOS 不同 )
		System.out.println( "relative path : " + fod );
		
		absolutePath = fod.getAbsolutePath(); // 获取绝对路径
		System.out.println( "absolute path : " + absolutePath );
		
		canonicalPath = fod.getCanonicalPath(); // 获取规范化路径 IOException
		System.out.println( "canonical path : " + canonicalPath );
		
		System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
		
		// 注意，在 Linux / Unix / macOS 的 shell 环境中，可以使用 "~" 表示当前用户主目录
		// 但是 在 Java 语言中，无法使用 ~ 表示 当前用户主目录
		// 所以，如果需要获得当前用户主目录可以通过 系统属性 "user.home" 来获取
		String userHome = System.getProperty( "user.home" );
		System.out.println( userHome );
		
		// 都有哪些系统属性，它们的取值分别是什么? [ System.getProperties() ]
		
	}

}
